import { createVuePlugin } from "vite-plugin-vue2";
import {defineConfig, loadEnv} from 'vite'
import viteCompression from 'vite-plugin-compression';
import requireTransform from 'vite-plugin-require-transform';
const CWD = process.cwd();

export default defineConfig(({ mode }) => {
    return {
        plugins: [
            createVuePlugin({
                vueTemplateOptions: {},
            }),
            requireTransform({
                fileRegex:/.js$|.ts$|.tsx$|.vue$/
                //   fileRegex:/.js$|.jsx$|.vue$/
            }),
            viteCompression({
                verbose: true,
                disable: false,
                threshold: 10240, // 大于100k的文件进行压缩
                algorithm: 'gzip',
                ext: '.gz',
            }),
        ],
        resolve: {
            extensions: [".vue", ".mjs", ".js", ".ts", ".jsx", ".tsx", ".json"],
            alias: [
                {
                    find: "@",
                    replacement: "/src",
                },
                {
                    find: "components",
                    replacement: "/src/components",
                },
            ],
        },
        build: {
            commonjsOptions: {
                transformMixedEsModules: true // require可以使用
            },
            rollupOptions: {
                output: {
                    manualChunks(id) {
                        if (id.includes('node_modules')) {
                            return id.toString().split('node_modules/')[1]
                                .split('/')[0].toString();
                        }
                    }
                }
            },
            cssCodeSplit: true, //  如果设置为false，整个项目中的所有 CSS 将被提取到一个 CSS 文件中
            sourcemap: true, // 构建后是否生成 source map 文件。如果为 true，将会创建一个独立的 source map 文件
            target: 'modules', // 设置最终构建的浏览器兼容目标。默认值是一个 Vite 特有的值——'modules'  还可设置为 'es2015' 'es2016'等
            chunkSizeWarningLimit: 550, // 单位kb  打包后文件大小警告的限制 (文件大于此此值会出现警告)
            assetsInlineLimit: 4096, // 单位字节（1024等于1kb） 小于此阈值的导入或引用资源将内联为 base64 编码，以避免额外的 http 请求。设置为 0 可以完全禁用此项。
            minify: 'terser', // 'terser' 相对较慢，但大多数情况下构建后的文件体积更小。'esbuild' 最小化混淆更快但构建后的文件相对更大。
            terserOptions: {
                compress: {
                    drop_console: true, // 生产环境去除console
                    drop_debugger: true, // 生产环境去除debugger
                },
            }
        },
        base: './',
        optimizeDeps: {
            // lodash-es 是vite自带的引用，optimizeDeps代表预构建;
            // 默认情况下，不在 node_modules 中的，链接的包不会被预构建,include代表强制预构建
            // include: ['element-plus', 'lodash-es'],
        },
        server: {
            host: '0.0.0.0',
            port: '8081',
            open: true,
            cors: true, // 允许跨域
            proxy: {
                //     '/mdsserver': {
                //         target: loadEnv(mode, CWD).VITE_BASE_URL, // 一般都有后面的mdsserver路径，所以去掉。直接用前面的域名就更全面
                //         changeOrigin: true,
                //         secure: false,
                //         rewrite: path => path.replace(/^\/mdsserver/, '') // 重写 api 为 空，就是去掉它
                //     },
                '/apinhy': {
                    target: loadEnv(mode, CWD).VITE_BASE_URL,
                    changeOrigin: true,
                    secure: false,
                    rewrite: (path) => path.replace(/^\/apinhy/, '')
                }
            }
        },
        // css: {
        //   preprocessorOptions: {
        //     // 覆盖掉element-plus包中的主题变量文件
        //     scss: {
        //       additionalData: `@use "@/styles/element/index.scss" as *;`,
        //     },
        //   },
        // },
    }
})


